#!/bin/bash
# **********************************************************************
# Trabajo Práctico de Sistemas Operativos (75.08)
#
# Primer Cuatrimestre 2013 - Grupo 8
#
# Comando: InicioY.sh
#
# Descripción: Este comando se encarga de:
#		1. Setear las variables de ambiente.
#		2. Verifica que existan los archivos correspondientes
#		3. Setear los permisos de los archivos
#		4. Invocar al script "DetectaY.sh"
#
# **********************************************************************

comandos=( DetectaY.sh Interprete.sh ReporteY.pl GlogY.sh StartY.sh StopY.sh MoverY.sh VlogY.sh )

# Muestra en pantalla y loguea
function loguear()
{
	# Mostrar en pantalla
	echo -e "$1";
	# Loguear en archivo
	"$BINDIR"/GlogY.sh InicioY I "$1"
}

cargarVariables(){
	
	config="../conf/InstalY.conf"
	export CONFIG=$config

	confdir=$(grep '^CONFDIR' "$CONFIG" | cut -f2 -d'=')
	export CONFDIR=$confdir

	bindir=$(grep '^BINDIR' "$CONFIG" | cut -f2 -d'=')
	export BINDIR=$bindir

	maedir=$(grep '^MAEDIR' "$CONFIG" | cut -f2 -d'=')
	export MAEDIR=$maedir

	arridir=$(grep '^ARRIDIR' "$CONFIG" | cut -f2 -d'=')
	export ARRIDIR=$arridir

	acepdir=$(grep '^ACEPDIR' "$CONFIG" | cut -f2 -d'=')
	export ACEPDIR=$acepdir

	rechdir=$(grep '^RECHDIR' "$CONFIG" | cut -f2 -d'=')
	export RECHDIR=$rechdir

	procdir=$(grep '^PROCDIR' "$CONFIG" | cut -f2 -d'=')
	export PROCDIR=$procdir

	repodir=$(grep '^REPODIR' "$CONFIG" | cut -f2 -d'=')
	export REPODIR=$repodir

	logdir=$(grep '^LOGDIR' "$CONFIG" | cut -f2 -d'=')
	export LOGDIR=$logdir

	logext=$(grep '^LOGEXT' "$CONFIG" | cut -f2 -d'=')
	export LOGEXT=$logext

	logsize=$(grep '^LOGSIZE' "$CONFIG" | cut -f2 -d'=')
	export LOGSIZE=$logsize
}

# Verifica la ejecucion del iniciaY
function verificaEjecucion()
{
	if [ $EXECINI="" ]
	then
		export EXECINI=0
	fi
}

mostrarArchivos(){
	#Bucle para listar archivos de una carpeta
	#loguear "Muestra los archivos de la carpeta $1:"
	declare local lista=$(ls "$1")
	echo $lista
}

mostrarEstructuraParametros(){
	loguear "********************************************************"
	loguear "TP SO7508 Primer Cuatrimestre 2013. Tema Y Copyright (c) Grupo08"
	loguear "Libreria del Sistema: $CONFDIR"
	mostrarArchivos "$CONFDIR"
	loguear "Ejecutables: $BINDIR" 
	mostrarArchivos "$BINDIR"
	loguear "Archivos Maestros: $MAEDIR"
	mostrarArchivos "$MAEDIR"
	loguear "Directorio de arribo de archivos externos: $ARRIDIR"
	loguear "Archivos externos aceptados: $ACEPDIR"
	loguear "Archivos externos rechazados: $RECHDIR"
	loguear "Archivos procesados: $PROCDIR"
	loguear "Reportes de salida: $REPODIR"
	loguear "Logs de auditoria del sistema: $LOGDIR/<comando>.$LOGEXT"
	loguear "Cantidad de ciclos: $CANLOOP"
	loguear "Tiempo de espera entre ciclos: $TESPERA"
	loguear "Estado de la instalacion: INICIALIZADO"
	loguear "************************************************************************"
}

# ------------------------ INICIO SCRIPT -------------------------------

verificaEjecucion

if [ $EXECINI==0 ]
then
	# Obtengo las variables de configuracion
	cargarVariables
	NO_INICIALIZAR=0

	# 1. Inicializar el archivo de log
	export EXECINI=1
	loguear "Comando InicioY Inicio de Ejecución..."
 
	# 2. Verificar que la instalacion esta completa y que los archivos tengan los permisos adecuados
	loguear "Verificando los comandos instalados..."
	faltanComm=0
	X=0
	commFaltantes=()
	for com in ${comandos[*]}
	do
		if [ ! -e "$BINDIR/$com" ]
		then
			commFaltantes[$X]=$com
			(( X = X + 1 ))
			faltanComm=1
		elif [[ ! -x "$BINDIR/$com" || ! -r "$BINDIR/$com" ]]
		then
			loguear "Configurando los permisos para el comando $com"
			chmod u+xr "$BINDIR/$com"
		fi
	done	
	if [ $faltanComm -eq 1 ]
	then 
		loguear "Falta instalar comandos"
		X=0
		for com in ${commFaltantes[*]}
		do
			IFS='\n'
			echo "- $com"
		done
		IFS=' '
		NO_INICIALIZAR=1
	fi

	loguear "Verificando directorios existentes..."
	faltanDirs=0
	X=0
	dirsFaltantes=()
	for dir in "$BINDIR"  "$MAEDIR"
	do
		if [ ! -d "$dir" ]
		then
			dirsFaltantes[$X]="$dir"
			(( X = X + 1 ))
			faltanDirs=1
			echo "NO EXISTE EL $dir!!!"
		fi	
	done	

	if [ $faltanDirs -eq 1 ]
	then 
		loguear "Faltan directorios"
		X=0
		for dir in ${dirsFaltantes[*]}
		do
			IFS='\n'
			echo "- $dir"
		done
		IFS=' '
		NO_INICIALIZAR=1
	fi

	loguear "Verificando los archivos maestros ..."
	faltanMaes=0
	X=0
	maesFaltantes=()
	for mae in "$MAEDIR/PPI.mae"  "$MAEDIR/p-s.mae"
	do
		if [ ! -e "$mae" ]
		then
			maesFaltantes[$X]="$mae"
			(( X = X + 1 ))
			faltanMaes=1
		elif [ ! -r "$mae" ]
		then
			loguear "Configurando los permisos para el archivo $mae"
			chmod u+r "$mae"
		fi
	done
	if [ $faltanMaes -eq 1 ]
	then 
		loguear "Faltan archivos maestros"
		X=0
		for mae in ${maesFaltantes[*]}
		do
			IFS='\n'
			echo "- $mae"
		done
		IFS=' '
		NO_INICIALIZAR=1
	fi
	
	# Si faltan archivos, finalizar la ejecucion
	if [ $NO_INICIALIZAR -eq 1 ]
	then
		loguear "Error al inicializar."
	else
		# 3. Verificar si el ambiente ya ha sido inicializado
		if [ "${AMBIENTE_INICIALIZADO}" != "" ]
		then
			loguear "El ambiente ya está inicializado ("$CANLOOP" ciclos)"
			mostrarEstructuraParametros
		else
			# Inicializacion

			# 4. Setear la variable path y cualquier otra variable de ambiente que considere necesaria
			export PATH="$PATH:$BINDIR"

			# 5. Solicitar al usuario que ingrese las variables de configuracion del comando detectaY (CANLOOP y TESPERA)
			CANLOOP=100
			INPUTCANLOOP=-1
			while [ $INPUTCANLOOP -lt 0 ]
			do
				loguear "Ingrese la cantidad de ciclos de detectaY ("$CANLOOP" ciclos): \\c"
				read INPUTCANLOOP
				if [ "$INPUTCANLOOP" == "" ]
				then
					INPUTCANLOOP=$CANLOOP
				fi
			done
			CANLOOP=$INPUTCANLOOP

			TESPERA=1
			INPUTTESPERA=0
			while [ $INPUTTESPERA -lt 1 ]
			do
				loguear "Ingrese el tiempo de espera entre ciclos ("$TESPERA" minuto): \\c"
				read INPUTTESPERA
				if [ "$INPUTTESPERA" == "" ]
				then
					INPUTTESPERA=$TESPERA
				fi
			done
			TESPERA=$INPUTTESPERA

			export CANLOOP
			export TESPERA

			# 6. Ver si desea arrancar detectaY
			loguear "Desea efectuar la activación de detectaY (S-N) ? [N]: \\c"
			read INPUTEXEC

			# 7. Final - Si el ambiente está inicializado correctamente, mostrar el contenido de las variables, el process id del demonio y el estado del sistema
			export AMBIENTE_INICIALIZADO=1
			mostrarEstructuraParametros

			if [ "$INPUTEXEC" == "S" -o "$INPUTEXEC" == "s" ]
			then
				# 7.1. Si desea arrancar detectaY, arrancarlo
				loguear "Se ejecutó DetectaY"
				"$BINDIR"/StartY.sh
			else
				# 7.2. Si no desea arrancar detectaY, entonces explicar como hacerlo manualmente
				loguear "Para ejecutar el proceso en forma manual, debe ejecutar $BINDIR/StartY.sh"
			fi
		fi
	fi
else
	loguear "Comando InicioY ya está ejecutandose"
fi
